package com.xlzcx.xltz.service.a_quest;

import com.xlzcx.xltz.dao.AQuestMapper;
import com.xlzcx.xltz.entity.AQuest;
import com.xlzcx.xltz.entity.vo.AQuestVo;
import com.xlzcx.xltz.utils.R;
import com.xlzcx.xltz.utils.SnowFlakeUtil;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Queue;

/**
 * 作者: 李咨辰
 * 文件名: AQuestServiceImpl.java
 * 路径: com.xlzcx.xltz.service.quest
 * 时间: 2024-10-14 14:48
 * 版本: 1.0
 * 描述: TODO 任务
 **/
@Service
public class AQuestServiceImpl implements AQuestService {
    /**
     * 调用dao层
     */
    @Resource
    private AQuestMapper aQuestMapper;

    /**
     * 获取条数
     *
     * @param sortId 分类编号
     * @return 条数
     */
    @Override
    public Long getQuestTotal(int sortId) {
        return aQuestMapper.getQuestTotal(sortId);
    }

    /**
     * 获取首页数据
     *
     * @param sortId   分类编号
     * @param current  当前页
     * @param pageSize 每页条数
     * @return 首页数据
     */
    @Override
    public List<AQuest> getQuestByHomeList(int sortId, int current, int pageSize) {
        return aQuestMapper.getQuestByHomeList(sortId, current * pageSize, pageSize);
    }

    /**
     * 添加需求
     *
     * @param aQuest 用户上传的需求
     * @return 添加结果
     */
    @Override
    public int addQuest(AQuest aQuest) {
        Date date = new Date();
        aQuest.setId(SnowFlakeUtil.getFlowIdInstance().nextId());
        aQuest.setCreateTime(date);
        return aQuestMapper.addQuest(aQuest);
    }

    /**
     * 根据任务编号和当前登录用户获取任务信息
     *
     * @param questId 任务编号
     * @param userId  用户编号
     * @return 任务详情
     */
    @Override
    public AQuestVo getQuestByQuestIdAndUserId(Long questId, Long userId) {
        return aQuestMapper.getQuestByQuestIdAndUserId(questId, userId);
    }

    /**
     * 查询任务列表(地图)
     *
     * @param city 城市
     * @return 任务列表
     */
    @Override
    public List<AQuestVo> getMapList(String city) {
        return aQuestMapper.getMapList(city);
    }

    /*
     *   获取用户发布的任务列表
     *   @param userId 用户编号
     *   @return 任务列表
     * */
    @Override
    public List<AQuestVo> getInitiatorList(String userId, int current, int pageSize) {
        return aQuestMapper.getInitiatorList(userId,current * pageSize, pageSize);
    }

    /**
     * 获取用户发布的任务总数
     *
     * @param userId 用户编号
     * @return 任务总数
     */
    @Override
    public Integer getInitiatorTotal(String userId) {
        return aQuestMapper.getInitiatorTotal(userId);
    }

    /**
     * 查询任务列表(待完成订单)
     *
     * @param userId        用户编号
     * @param publishStatus 发布状态
     * @return 任务列表
     */
    @Override
    public List<AQuestVo> getReceiverList(String userId, Integer publishStatus) {
        return aQuestMapper.getReceiverList(userId, publishStatus);
    }

    /**
     * 截取订单
     * @param userId 用户编号
     * @param questId 任务编号
     * @return msg提示
     */
    @Override
    public R receive(long userId, long questId) {
        AQuest getQuest = aQuestMapper.getQuest(questId);
        if (getQuest.getInitiatorId() != userId) {
            AQuest quest = new AQuest();
            quest.setId(questId);
            quest.setReceiverId(userId);
            quest.setUpdateTime(new Date());

            if (aQuestMapper.updateQuest(quest)>0) {
                return R.ok("任务接取成功！");
            }
            return R.error("系统异常，任务接取失败！");
        }
        return R.error("不能接取自己发布的任务！");
    }

    /**
     * 更新任务状态
     *
     * @param questId 任务编号
     * @param publishStatus 发布状态
     * @return 更新结果
     */
    @Override
    public boolean updateQuestStatus(Long questId, Integer publishStatus) {
        return aQuestMapper.updateQuestStatus(questId, publishStatus) > 0;
    }
}
